\chapter{文字について}
\section{文字コード}
文字コードは libc で変換に対応しているものは全て利用できます。
ただし、Dragon Script は内部で Unicode を利用するため、また一部の
システムでは「対応していなかった」などの問題が生じる恐れがあるため、
UTF-8 で書かれることをお薦めします。なお、デフォルトの文字コードは
端末の文字コードになっています。つまり、端末の文字コードが EUC-JP に
なっている場合、\texttt{LANG} 命令のないスクリプトは EUC-JP で
読み込もうとします。端末が UTF-8 でない場合は多いでしょうから、
スクリプトファイルに
\begin{lstlisting}
LANG="ja_JP.UTF-8"
\end{lstlisting}
として UTF-8 であることを明記して置くことをお薦めします。なお、
スクリプトファイルには UTF-8 に変換できる文字であれば何でも使用することが
できます。ただし、端末に表示する場合は端末の文字コードで表現できない文字は
置き換えられてしまう場合がありますのでご注意ください。

\section{特殊な意味を持つ字}
Dragon Script 上で特殊な意味を持つ字はいろいろありますが、意味は以下の
6 つです。これらの文字は変数名や命令文法の叙述の際に使用することができません。
\begin{itemize}
  \item 単語の区切り。
  \item 文の終わり。
  \item インデント用。
  \item 数値の表記用。
  \item 文字列を表す部分を括るための記号。
  \item 常に無視される文字。
\end{itemize}
なお、この文書では字の表記には UCS-4 および、BMP 面の名称を利用します。
ただし、{\tt 0020} より小さいものは全て $<$Control$>$ であるため、
便宜上名称を与えています。なお、\LaTeXe 上で表記できないものは \NA を使用します
\footnote{本当は表記できないわけではないのだが Babel をインストールするのは
非常に面倒なので・・・(略)}。

\subsection{空白文字}
Dragon Script では表\ref{space_characters}の文字は空白文字として扱われます。
以下、\indy{くうはくもし}{空白文字}は以下の文字全てまたはこれらのいづれかを指します。
\begin{table}[htbp]
\centering
\caption{空白文字一覧}
\label{space_characters}
\begin{tabular}{c c c}
  \hline
  文字 & 名称 & コード番号 (16進) \\
  \hline
  & 水平タブ & {\tt 0009} \\
  & 改行 & {\tt 000A} \\
  & Space & {\tt 0020} \\
  & No-break Space & {\tt 00A0} \\
  \hline
  & En Quad & {\tt 2000} \\
  &  & \rotatebox{90}{$\sim$} \\
  & Right-to-Left Mark & {\tt 200F} \\
  & Line Separator & {\tt 2028} \\
  &  & \rotatebox{90}{$\sim$} \\
  & Narrow No-break Space & {\tt 202F} \\
  & Medium Mathematical Space & {\tt 205F} \\
  &  & \rotatebox{90}{$\sim$} \\
  & Invisible Plus & {\tt 2064} \\
  & Inhibit Symmetric Swapping & {\tt 206A} \\
  &  & \rotatebox{90}{$\sim$} \\
  & Nominal Digit Space & {\tt 206F} \\
  \hline
  & Ideographic Space & {\tt 3000} \\
  \hline
  & Zero Width No-break Space & {\tt FEFF} \\
  \hline
\end{tabular}
\end{table}

\subsection{単語区切り文字}
\indy{たんこくきりもし}{単語区切り文字}は以下の表\ref{word_splitter}の通りです。
\begin{table}[htbp]
\centering
\caption{単語区切り文字一覧}
\label{word_splitter}
\begin{tabular}{c c c}
  \hline
  文字 & 名称 & コード番号 (16進) \\
  \hline
  & 空白文字全て & --- \\
  , & Comma & {\tt 002C} \\
  \raisebox{5pt}{\scalebox{-1}[-1]{;}} & Arabic Comma & {\tt 060C} \\
  , & Single Low-9 Quotation Mark & {\tt 201A} \\
  、 & Ideographic Comma & {\tt 3001} \\
  \hline
\end{tabular}
\end{table}

\subsection{文の終わりを表す文字}
\indy{ふんしゅうたんもし}{文終端文字}は以下の表\ref{sentence_end}の通りです。
\begin{table}[htbp]
\centering
\caption{文終端文字一覧}
\label{sentence_end}
\begin{tabular}{c c c}
  \hline
  文字 & 名称 & コード番号 (16進) \\
  \hline
  & 改行 & {\tt 000A} \\
  . & Full Stop & {\tt 002E} \\
  ; & Semicolon & {\tt 003B} \\
  。 & Ideographic Full Stop & {\tt 3002} \\
  \hline
  ! & Exclamation Mark & {\tt 0021} \\
  ? & Question Mark & {\tt 003F} \\
  ; & Greek Question Mark & {\tt 037E} \\
  \scalebox{-1}[1]{?} & Arabic Question Mark & {\tt 061F} \\
  !! & Double Exclamation Mark & {\tt 203C} \\
  \textinterrobang & Interrobang & {\tt 203D} \\
  ?? & Double Question Mark & {\tt 2047} \\
  ?! & Question Exclamation Mark & {\tt 2048} \\
  !? & Exclamation Question Mark & {\tt 2049} \\
  \ding{162} & Heavy Exclamation Mark Ornament & {\tt 2762} \\
  \ding{163} & Heavy Heart Exclamation Mark Ornament & {\tt 2763} \\
  \scalebox{-1}[1]{?} & Reversed Question Mark & {\tt 2E2E} \\
  \hline
\end{tabular}
\end{table}

\subsection{インデント用文字}
\index[wordindex]{いんてんとようもし@インデント用文字}
インデントには全ての空白文字が使用できます。ただし、空白文字には幅の無い物が含まれています。
それらの使用は奨励されません。

\subsection{文字列を表す部分を括るための記号}
\indy{いんようふ}{引用符}とも呼びます。開始と終端で異なる文字を使う物と同じ文字を使う
ものがありますが全てまとめて説明します。開始と終端は組みでのみ使用することができます。
つまり、開始文字と異なる種類の終端文字で終わることはできません。引用符は表\ref{quotations}
の通りです。
\begin{table}[htbp]
\begin{minipage}{\textwidth}
\centering
\caption{引用符一覧}
\label{quotations}
\begin{tabular}{c c c c}
  \hline
  開始 & \multirow{2}{20pt}{名称} & 開始番号 & \multirow{2}{40pt}{変数展開} \\
  終了 & & 終了番号 & \\
  \hline
  \verb+"+ & Quotation Mark & {\tt 0022} & する \\
  \hline
   \verb+`+ & Grave Accent & {\tt 0060} & \multirow{2}{30pt}{しない} \\
   \verb+'+ & Apostrophe   & {\tt 0027} & \\
  \hline
	\flqq  & Left-pointing Double Angle \footnote{Left-pointing Double Angle Quotation Mark が正しい名称}
				& {\tt 00AB} & \multirow{2}{20pt}{する} \\
     \frqq & Right-pointing Double Angle \footnote{Right-pointing Double Angle Quotation Mark が正しい名称}
				& {\tt 00BB} \\
  \hline
	` & Left Single Quotation Mark & {\tt 2018} & \multirow{2}{30pt}{しない} \\
	' & Right Single Quotation Mark & {\tt 2019} &  \\
  \hline
	`` & Left Double Quotation Mark & {\tt 201C} & \multirow{2}{20pt}{する}\\
	'' & Right Double Quotation Mark & {\tt 201D} & \\
  \hline
	\flq & Left-pointing Single Angle \footnote{Left-pointing Single Angle Quotation Mark が正しい名称}
				& {\tt 2039} & \multirow{2}{30pt}{しない} \\
	\frq & Right-pointing Single Angle \footnote{Right-pointing Single Angle Quotation Mark が正しい名称}
				& {\tt 203A} &  \\
  \hline
	\ding{123} & Single Quotation Ornament \footnote{Heavy Single Turned Comma Quotation Ornament が正しい名称} 
				& {\tt 275B} & \multirow{2}{30pt}{しない} \\
	\ding{124} & Single Quotation Ornament \footnote{Heavy Single Comma Quotation Ornament が正しい名称}
				& {\tt 275C} \\
  \hline
	\ding{125} & Double Quotation Ornament \footnote{Heavy Double Turned Comma Quotation Ornament が正しい名称}
				& {\tt 275D} & \multirow{2}{20pt}{する} \\
	\ding{126} & Double Quotation Ornament \footnote{Heavy Double Comma Quotation Ornament が正しい名称} 
				& {\tt 275E} & \\
  \hline
	「 & Left Corner Bracket & {\tt 300C} & \multirow{2}{20pt}{する} \\
	」 & Right Corner Bracket & {\tt 300D}  \\
  \hline
	『 & Left White Corner Bracket & {\tt 300E} & \multirow{2}{30pt}{しない} \\
	』 & Right White Corner Bracket & {\tt 300F}  \\
  \hline
\end{tabular}
\end{minipage}
\end{table}

\subsection{常に無視される文字}
\index[wordindex]{むしされるもし@無視される文字}
各々の言語の諸事情により常に無視するのがよいと考えられる文字です。該当する文字は
表\ref{ignored_chars}の通りです。
\begin{table}[htbp]
\centering
\caption{無視される文字一覧}
\label{ignored_chars}
\begin{tabular}{c c c}
  \hline
  文字 & 名称 & コード番号 (16進) \\
  \hline
  !` & Inverted Exclamation Mark & {\tt 00A1} \\
  ?` & Inverted Question Mark & {\tt 00BF} \\
  \hline
\end{tabular}
\end{table}

\subsection{数値の表記用およびそれに付随する文字}
\index[wordindex]{すうし@数字}
数値の表記には
\begin{itemize}
 \item アラビア数字 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
 \item ローマ数字 (I, V, X, L, C, D, M)
 \item 漢数字 (零、一、二、三、四、五、六、七、八、九、十、百、千、$\cdots$)
 \item 算木・算籌文字 (SMP が利用できる環境のみ)
\end{itemize}
が使えます。ただし、ローマ数字と漢数字では小数や十進数以外の進数および負数は表現できません。
算木では小数や十進数以外の進数は表現できません。アラビア数字と漢数字に限っては混合することが
できます。

ローマ数字は、通常のラテン文字と区別するため、
{\tt 2160}\ $\sim$\ {\tt 2188} の範囲の文字を使う必要があります。

漢数字の場合は、単位文字を省略せずに書く必要があります。例えば、
\begin{lstlisting}
一億六千八百三十二万千百十一
\end{lstlisting}
のように。千・百・十 に関しては「一」の場合は「一」を省略できます。なお漢数字は上に示し
た字以外 (万、億、兆、京、垓 など) は上に示した字に続かない場合に限って変数名や
命令構文で利用することができます。

算木の負数表記には \textbackslash\ ({\tt 20E5}) を使ってください。

アラビア数字に関しては \ref{constant} をご覧ください。
アラビア数字で負数を表現するのに使用する $-$ ({\tt 002D}) に続いてアラビア数字が
続くような変数名や命令を定義することはできません。

\subsection{その他}
{\tt \textbackslash}\ ({\tt 005C}) は命令構文に含める時および文字列に含める時は
{\tt \textbackslash\textbackslash} とする必要があります。それ以外ではそのまま使用できます。

{\tt \%} は後ろに 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F (小文字も含む)が
続かない場合に限りどこでも使用できます。ただし文字列中では {\tt \textbackslash\%} 
とする必要があります。

\section{英数字の全角、カタカナなどの半角の扱い}
Dragon Script では、英数字の全角はその半角と、カタカナなどの半角はその全角と区別
せず、おなじ文字として扱われます。つまり、
\begin{lstlisting}
ABC=1。
ＡＢＣ=0。
ABCと言え。
\end{lstlisting}
は
\begin{lstlisting}
0
\end{lstlisting}
になります。なお、もちろん
\begin{lstlisting}
もし「ABC」=「ＡＢＣ」ならば、・・・。
\end{lstlisting}
は偽になります。

\section{大文字と小文字の区別と判定}
変数名の大文字と小文字は区別されます。つまり、
\begin{lstlisting}
ABC=1。
abc=0。
ABCと言え。
\end{lstlisting}
は
\begin{lstlisting}
1
\end{lstlisting}
になります。しかし、命令に一致させる時は大文字と小文字の違いは無視されます。
例えば、
\begin{lstlisting}
i have a pen.
\end{lstlisting}
は
\begin{lstlisting}
I have a pen.
\end{lstlisting}
の命令にマッチします。

何が大文字で、何が小文字かはシステムに依存します。例えば、フランス語などでは\ 
\'{e} は小文字で \'{E} は大文字の区別を受けますが、英語では全く別の文字
として扱われます。

\section{UTF表記$\cdot$バイナリ表記}
\indy{UTFひようき}{UTF表記}$\cdot$\indy{はいなりひようき}{バイナリ表記}とは、
直接入力するのが困難な場合、または使用している文字コードで表現できない Unicode 
の文字を使用したい場合に使用することができます。また一定のバイナリ列を表現する
場合にも使用することができます。

{\tt \%} 記号で 2 桁、4 桁または 8 桁の 16 進数を挟むことで利用します。
\begin{lstlisting}
%24%
\end{lstlisting}
のように。

上4桁が {\tt 0} の8桁と4桁の物は全く同じに扱われます。
つまり、
\begin{lstlisting}
%0000300D%
\end{lstlisting}
と
\begin{lstlisting}
%300D%
\end{lstlisting}
は同義ですが、4桁と2桁は意味がやや異なります。例えば、
\begin{lstlisting}
%00A1%
\end{lstlisting}
と
\begin{lstlisting}
%A1%
\end{lstlisting}
は出力した際の挙動が異なります。{\tt \%7F\%} 未満はおそらくどの文字コードを
利用しても同じ結果が得られるでしょうが、4桁の場合は、出力の際、指定した文字
コードまたは指定していない場合はローカルの文字コードに変換されます。ただし、
出力先がバイナリであることを明示してる場合は {\tt \%0041\%} などはファイルに
16ビット整数値の {\tt \%0041\%} を出力します。この時、エンディアンの影響を
受けますのでご注意ください。

この機能は文字列中やバイナリ列を定義する際だけでなく、スクリプト本文中でも使用
できます。つまり、本来入力が困難な命令を指示するのに使うことができます。例えば、
\begin{lstlisting}
%300C%Hello, World!%300D%%3068%%8A00%%3048%!
\end{lstlisting}
は
\begin{lstlisting}
「Hello, World!」と言え!
\end{lstlisting}
と直された後に解釈$\cdot$実行されます。